semaphore mutex = 1;  //定义信号量并初始化为mutex=1，保证三类进程互斥访问缓冲区；
semaphore rmutex = 1; //定义信号量并初始化为rmutex=1，保证对信号量full操作是互斥的；
semaphore input = 0;
semaphore handle = 0;
semaphore print = 0;
semaphore empty = k;
int full = 0;
Input() //输入进程
{
    while (true)
    {
        wait(input);    //获取输入权限；
        wait(empty);    //申请一个缓冲区；
        wait(rmutex);   //申请对full的操作权限
        full++;         //修改full值；
        signal(rmutex); //释放full的权限
        wait(mutex);    //申请缓冲池（临界区）操作权限
        inputting;      //进行读入操作，逐条读入，
        signal(mutex);  //当前此条消息读入完毕，释放缓冲池（临界区）使用权限
        signal(input);  //暂时放弃输入权限；
    }
}
Handle() //处理进程
{
    while (true)
    {
        wait(input);   //回收输入进程的权限；一旦开始处理数据不允许放入数据，直到此次被处理的数据输出后；
        wait(handle);  //获取处理权限；
        wait(mutex);   //申请缓冲池（临界区）操作权限
        handling;      //处理数据（一次性处理所有数据）
        signal(mutex); //释放缓冲池（临界区）使用权限
        signal(print); //开放打印输出权限
    }
}

Print() //输出进程
{
    while (true)
    {
        wait(print);   //获取打印输出权限
        wait(mutex);   //申请缓冲池操作权限
        printting;     //打印输出
        signal(mutex); //释放缓冲池（临界区）使用权限
        wait(rmutex);  ////申请对full的操作权限
        while (full > 0)
        {
            signal(empty); //释放这些临界区（逐个释放）
            full--;        //修改full值input
        }
        signal(rmutex); //释放full的权限；
        signal(input);  //开放输入权限；
        signal(handle); //开放处理进程权限；
    }
}